@@ -775,12 +775,16 @@ def member_activity_list(request, administrator):  | 
            ||
| 775 | 775 | 
                     end_time = request.POST.get('end_time', '')
               | 
            
| 776 | 776 | 
                     page = request.POST.get('page', 1)
               | 
            
| 777 | 777 | 
                     num = request.POST.get('num', 20)
               | 
            
| 778 | 
                +    activity_state = request.POST.get('activity_state', '')
               | 
            |
| 778 | 779 | 
                 | 
            
| 779 | 780 | 
                logs = MemberActivityInfo.objects.filter(status=True)  | 
            
| 780 | 781 | 
                 | 
            
| 781 | 782 | 
                if activity_type:  | 
            
| 782 | 783 | 
                logs = logs.filter(activity_type=activity_type)  | 
            
| 783 | 784 | 
                 | 
            
| 785 | 
                + if activity_state:  | 
            |
| 786 | 
                + logs = logs.filter(activity_state=activity_state)  | 
            |
| 787 | 
                +  | 
            |
| 784 | 788 | 
                if title:  | 
            
| 785 | 789 | 
                logs = logs.filter(title__icontains=title)  | 
            
| 786 | 790 | 
                 | 
            
                @@ -1445,8 +1449,16 @@ def member_goods_list(request, administrator):  | 
            ||
| 1445 | 1449 | 
                     title = request.POST.get('title', '')
               | 
            
| 1446 | 1450 | 
                     page = request.POST.get('page', 1)
               | 
            
| 1447 | 1451 | 
                     num = request.POST.get('num', 20)
               | 
            
| 1452 | 
                +    understock = request.POST.get('understock', 0)
               | 
            |
| 1453 | 
                +    good_state = request.POST.get('good_state', '')
               | 
            |
| 1454 | 
                +  | 
            |
| 1455 | 
                +    logs = GoodsInfo.objects.filter(title__icontains=title).order_by('-pk')
               | 
            |
| 1456 | 
                +  | 
            |
| 1457 | 
                + if understock:  | 
            |
| 1458 | 
                + logs = logs.filter(left_num=0)  | 
            |
| 1448 | 1459 | 
                 | 
            
| 1449 | 
                -    logs = GoodsInfo.objects.filter(title__icontains=title, only_for_member=False).order_by('-pk')
               | 
            |
| 1460 | 
                + if good_state:  | 
            |
| 1461 | 
                + logs = logs.filter(good_state=good_state)  | 
            |
| 1450 | 1462 | 
                 | 
            
| 1451 | 1463 | 
                count = logs.count()  | 
            
| 1452 | 1464 | 
                logs, left = pagination(logs, page, num)  | 
            
                @@ -0,0 +1,30 @@  | 
            ||
| 1 | 
                +# -*- coding: utf-8 -*-  | 
            |
| 2 | 
                +  | 
            |
| 3 | 
                +# Generated by Django 3.2.6 on 2023-03-03 08:53  | 
            |
| 4 | 
                +  | 
            |
| 5 | 
                +from django.db import migrations, models  | 
            |
| 6 | 
                +  | 
            |
| 7 | 
                +  | 
            |
| 8 | 
                +class Migration(migrations.Migration):  | 
            |
| 9 | 
                +  | 
            |
| 10 | 
                + dependencies = [  | 
            |
| 11 | 
                +        ('member', '0053_alter_memberactivitygroupshareinfo_unique_together'),
               | 
            |
| 12 | 
                + ]  | 
            |
| 13 | 
                +  | 
            |
| 14 | 
                + operations = [  | 
            |
| 15 | 
                + migrations.AddField(  | 
            |
| 16 | 
                + model_name='goodsinfo',  | 
            |
| 17 | 
                + name='good_state',  | 
            |
| 18 | 
                + field=models.IntegerField(choices=[(1, '上架'), (2, '下架')], db_index=True, default=1, help_text='商品类型', verbose_name='good_state'),  | 
            |
| 19 | 
                + ),  | 
            |
| 20 | 
                + migrations.AddField(  | 
            |
| 21 | 
                + model_name='goodsinfo',  | 
            |
| 22 | 
                + name='relate_good_title',  | 
            |
| 23 | 
                + field=models.CharField(blank=True, help_text='商品名称', max_length=255, null=True, verbose_name='relate_good_title'),  | 
            |
| 24 | 
                + ),  | 
            |
| 25 | 
                + migrations.AddField(  | 
            |
| 26 | 
                + model_name='goodsorderinfo',  | 
            |
| 27 | 
                + name='relate_good_title',  | 
            |
| 28 | 
                + field=models.CharField(blank=True, help_text='关联商品', max_length=255, null=True, verbose_name='relate_good_title'),  | 
            |
| 29 | 
                + ),  | 
            |
| 30 | 
                + ]  | 
            
                @@ -26,6 +26,14 @@ class GoodsInfo(BaseModelMixin, BrandInfoMixin):  | 
            ||
| 26 | 26 | 
                (VIRTUAL, u'虚拟'),  | 
            
| 27 | 27 | 
                )  | 
            
| 28 | 28 | 
                 | 
            
| 29 | 
                + SHELVES = 1  | 
            |
| 30 | 
                + OFF_SHELVES = 2  | 
            |
| 31 | 
                +  | 
            |
| 32 | 
                + GOOD_STATE_TUPLE = (  | 
            |
| 33 | 
                + (SHELVES, u'上架'),  | 
            |
| 34 | 
                + (OFF_SHELVES, u'下架'),  | 
            |
| 35 | 
                + )  | 
            |
| 36 | 
                +  | 
            |
| 29 | 37 | 
                good_id = ShortUUIDField(_(u'good_id'), max_length=32, blank=True, null=True, help_text=u'商品唯一标识', db_index=True, unique=True)  | 
            
| 30 | 38 | 
                good_type = models.IntegerField(_(u'good_type'), choices=GOOD_TYPE_TUPLE, default=VIRTUAL, help_text=u'商品类型', db_index=True)  | 
            
| 31 | 39 | 
                 | 
            
                @@ -49,8 +57,12 @@ class GoodsInfo(BaseModelMixin, BrandInfoMixin):  | 
            ||
| 49 | 57 | 
                only_for_member = models.BooleanField(_(u'only_for_member'), default=False, help_text=u'会员专属')  | 
            
| 50 | 58 | 
                only_once = models.BooleanField(_(u'only_once'), default=False, help_text=u'仅支持兑换一次')  | 
            
| 51 | 59 | 
                 | 
            
| 60 | 
                + relate_good_title = models.CharField(_(u'relate_good_title'), max_length=255, blank=True, null=True, help_text=u'商品名称')  | 
            |
| 61 | 
                +  | 
            |
| 52 | 62 | 
                position = models.IntegerField(_(u'position'), default=1, help_text=u'排序', db_index=True)  | 
            
| 53 | 63 | 
                 | 
            
| 64 | 
                + good_state = models.IntegerField(_(u'good_state'), choices=GOOD_STATE_TUPLE, default=SHELVES, help_text=u'商品类型', db_index=True)  | 
            |
| 65 | 
                +  | 
            |
| 54 | 66 | 
                is_upload_qiniu = models.BooleanField(_(u'is_upload_qiniu'), default=False, help_text=u'是否已上传七牛')  | 
            
| 55 | 67 | 
                 | 
            
| 56 | 68 | 
                class Meta:  | 
            
                @@ -130,6 +142,8 @@ class GoodsInfo(BaseModelMixin, BrandInfoMixin):  | 
            ||
| 130 | 142 | 
                'fee': self.fee,  | 
            
| 131 | 143 | 
                'value': self.value,  | 
            
| 132 | 144 | 
                'left_num': self.left_num,  | 
            
| 145 | 
                + 'relate_good_title': self.relate_good_title,  | 
            |
| 146 | 
                + 'good_state': self.good_state,  | 
            |
| 133 | 147 | 
                'coupon': coupon,  | 
            
| 134 | 148 | 
                'created_at': tc.local_string(utc_dt=self.created_at),  | 
            
| 135 | 149 | 
                }  | 
            
                @@ -144,6 +158,8 @@ class GoodsInfo(BaseModelMixin, BrandInfoMixin):  | 
            ||
| 144 | 158 | 
                'good_id': self.good_id,  | 
            
| 145 | 159 | 
                'good_type': self.good_type,  | 
            
| 146 | 160 | 
                'title': self.title,  | 
            
| 161 | 
                + 'relate_good_title': self.relate_good_title,  | 
            |
| 162 | 
                + 'good_state': self.good_state,  | 
            |
| 147 | 163 | 
                'image': self.image_url,  | 
            
| 148 | 164 | 
                'image_path': self.image_path,  | 
            
| 149 | 165 | 
                'slider_image': self.slider_image_url,  | 
            
                @@ -175,6 +191,7 @@ class GoodsOrderInfo(BaseModelMixin, BrandInfoMixin):  | 
            ||
| 175 | 191 | 
                good_type = models.IntegerField(_(u'good_type'), choices=GOOD_TYPE_TUPLE, default=VIRTUAL, help_text=u'商品类型', db_index=True)  | 
            
| 176 | 192 | 
                 | 
            
| 177 | 193 | 
                title = models.CharField(_(u'title'), max_length=255, blank=True, null=True, help_text=u'商品名称')  | 
            
| 194 | 
                + relate_good_title = models.CharField(_(u'relate_good_title'), max_length=255, blank=True, null=True, help_text=u'关联商品')  | 
            |
| 178 | 195 | 
                 | 
            
| 179 | 196 | 
                name = models.CharField(_(u'name'), max_length=255, blank=True, null=True, help_text=u'姓名')  | 
            
| 180 | 197 | 
                phone = models.CharField(_(u'phone'), max_length=255, blank=True, null=True, help_text=u'电话')  | 
            
                @@ -204,6 +221,7 @@ class GoodsOrderInfo(BaseModelMixin, BrandInfoMixin):  | 
            ||
| 204 | 221 | 
                'order_id': self.order_id,  | 
            
| 205 | 222 | 
                'good_id': self.good_id,  | 
            
| 206 | 223 | 
                'good_name': good.title,  | 
            
| 224 | 
                + 'relate_good_title': self.relate_good_title,  | 
            |
| 207 | 225 | 
                'good_type': good.good_type,  | 
            
| 208 | 226 | 
                'user_id': self.user_id,  | 
            
| 209 | 227 | 
                'user_name': self.name,  |